In WO2007/045920, hereby incorporated by reference in its entirety, we described techniques which allow a program, more particularly the machine code of a program, to effectively be run backwards. This is helpful as it allows an error to be traced backwards from, say, the moment it caused the program to crash until the error first appeared. As the skilled person will appreciate, crashing can take many forms, generally summarised as the program not running as intended—for example a segmentation fault, and unhandled exception, or an infinite loop.
Whilst backwards execution of a program is invaluable in debugging, it would be useful to have additional tools to make the debugging process easier and faster. There is a particular problem in locating and dealing with bugs which are not readily reproducible—for example a user may occasionally report a program as slow but identifying and correcting the cause of the problem can be difficult if the fault is intermittent.